package com.micro.frog.common.utils;

import java.math.BigDecimal;

/**
 * @author Jason.lv
 * @since 2020/8/10
 */
public class BigDecimalUtil {

    private BigDecimalUtil() {
    }

    public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
        return (v1 == null ? BigDecimal.ZERO : v1).add(v2 == null ? BigDecimal.ZERO : v2);
    }

    public static Integer integer(BigDecimal bigDecimal) {
        return bigDecimal == null ? 0 : bigDecimal.intValue();
    }

    public static String string(BigDecimal bigDecimal) {
        return bigDecimal == null ? "0.00" : bigDecimal.toString();
    }

    public static BigDecimal parseInt(Integer val) {
        return val == null ? BigDecimal.ZERO : new BigDecimal(val);
    }

    public static BigDecimal parseString(String val) {
        return val == null ? null : new BigDecimal(val);
    }

    public static BigDecimal yuanToFen(Integer val) {
        return val == null ? BigDecimal.ZERO : BigDecimal.valueOf(val).multiply(BigDecimal.valueOf(100));
    }

    public static BigDecimal yuanToFen(BigDecimal val) {
        return val == null ? BigDecimal.ZERO : val.multiply(BigDecimal.valueOf(100));
    }

    public static BigDecimal fenToYuan(Integer val) {
        return val == null ? BigDecimal.ZERO : BigDecimal.valueOf(val).divide(BigDecimal.valueOf(100), BigDecimal.ROUND_HALF_UP);
    }

    public static BigDecimal yuanToFen(String val) {
        return val == null ? BigDecimal.ZERO : new BigDecimal(val).multiply(BigDecimal.valueOf(100));
    }

    public static BigDecimal fenToYuan(String val) {
        return val == null ? BigDecimal.ZERO : new BigDecimal(val).divide(BigDecimal.valueOf(100), BigDecimal.ROUND_HALF_UP);
    }

    public static BigDecimal fenToYuan(BigDecimal val) {
        return val == null ? BigDecimal.ZERO : val.divide(BigDecimal.valueOf(100), BigDecimal.ROUND_HALF_UP);
    }

    public static Boolean isSame(BigDecimal val1, BigDecimal val2) {
        val1 = val1 == null ? BigDecimal.ZERO : val1;
        val2 = val2 == null ? BigDecimal.ZERO : val2;
        return val1.compareTo(val2) == 0;
    }

}
